<!DOCTYPE html>
<html lang="en" dir="auto">

<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Posts | Johnhoo&#39;s Blog</title>
<meta name="keywords" content="" />
<meta name="description" content="Posts - Johnhoo&#39;s Blog">
<meta name="author" content="">
<link rel="canonical" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/" />
<link crossorigin="anonymous" href="/blog.gitee.io/assets/css/stylesheet.min.c88963fe2d79462000fd0fb1b3737783c32855d340583e4523343f8735c787f0.css" integrity="sha256-yIlj/i15RiAA/Q&#43;xs3N3g8MoVdNAWD5FIzQ/hzXHh/A=" rel="preload stylesheet" as="style">
<link rel="icon" href="http://johnhoowong.gitee.io/blog.gitee.io/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="http://johnhoowong.gitee.io/blog.gitee.io/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="http://johnhoowong.gitee.io/blog.gitee.io/favicon-32x32.png">
<link rel="apple-touch-icon" href="http://johnhoowong.gitee.io/blog.gitee.io/apple-touch-icon.png">
<link rel="mask-icon" href="http://johnhoowong.gitee.io/blog.gitee.io/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<meta name="generator" content="Hugo 0.85.0" />
<link rel="alternate" type="application/rss+xml" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/index.xml">
<noscript>
    <style>
        #theme-toggle,
        .top-link {
            display: none;
        }

    </style>
    <style>
        @media (prefers-color-scheme: dark) {
            :root {
                --theme: rgb(29, 30, 32);
                --entry: rgb(46, 46, 51);
                --primary: rgb(218, 218, 219);
                --secondary: rgb(155, 156, 157);
                --tertiary: rgb(65, 66, 68);
                --content: rgb(196, 196, 197);
                --hljs-bg: rgb(46, 46, 51);
                --code-bg: rgb(55, 56, 62);
                --border: rgb(51, 51, 51);
            }

            .list {
                background: var(--theme);
            }

            .list:not(.dark)::-webkit-scrollbar-track {
                background: 0 0;
            }

            .list:not(.dark)::-webkit-scrollbar-thumb {
                border-color: var(--theme);
            }
        }

    </style>
</noscript><meta property="og:title" content="Posts" />
<meta property="og:description" content="赵化冰，程序员, 开源爱好者，生活探险家 | 这里是 赵化冰 的博客，与你一起发现更大的世界。" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://johnhoowong.gitee.io/blog.gitee.io/posts/" />

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Posts"/>
<meta name="twitter:description" content="赵化冰，程序员, 开源爱好者，生活探险家 | 这里是 赵化冰 的博客，与你一起发现更大的世界。"/>


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [, 
    {
      "@type": "ListItem",
      "position":  2 ,
      "name": "Posts",
      "item": "http://johnhoowong.gitee.io/blog.gitee.io/posts/"
    }
  ]
}
</script>
</head>

<body class="list" id="top">
<script>
    if (localStorage.getItem("pref-theme") === "dark") {
        document.body.classList.add('dark');
    } else if (localStorage.getItem("pref-theme") === "light") {
        document.body.classList.remove('dark')
    } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        document.body.classList.add('dark');
    }

</script>

<header class="header">
    <nav class="nav">
        <div class="logo">
            <a href="http://johnhoowong.gitee.io/blog.gitee.io" accesskey="h" title="Johnhoo&#39;s Blog (Alt + H)">Johnhoo&#39;s Blog</a>
            <span class="logo-switches">
                <button id="theme-toggle" accesskey="t" title="(Alt + T)">
                    <svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
                    </svg>
                    <svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <circle cx="12" cy="12" r="5"></circle>
                        <line x1="12" y1="1" x2="12" y2="3"></line>
                        <line x1="12" y1="21" x2="12" y2="23"></line>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
                        <line x1="1" y1="12" x2="3" y2="12"></line>
                        <line x1="21" y1="12" x2="23" y2="12"></line>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
                    </svg>
                </button>
            </span>
        </div>
        <ul id="menu">
        </ul>
    </nav>
</header>
<main class="main"> 
<header class="page-header">
  <h1>Posts</h1>
</header>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>深信服一面
    </h2>
  </header>
  <section class="entry-content">
    <p>  给定一个字符串，找出该字符串中最大的回文子串
https://leetcode-cn.com/problems/longest-palindrome/
  从打开浏览器输入网址,到页面显示出来经历了什么 https://www.cnblogs.com/kongxy/p/4615226.html
https://www.cnblogs.com/yuanzhiguo/p/8119470.html
任何网络设备的通信、交流都是经过下图的步骤：
  HTTPS的加密过程
https://www.jianshu.com/p/e30a8c4fa329
  TCP建立连接的过程
https://blog.csdn.net/Foxir/article/details/44163755
三次握手与四次挥手
  TCP有个状态为time_wait状态。如果服务端发现很多socket连接都处于这个状态，是什么原因，如何解决
https://blog.csdn.net/huangyimo/article/details/81505558
  数据库中，B&#43;树为什么作为索引
  之前项目的数据库量有多大/你的技能储备能够使多少数据不会崩
  代码重构的一些规则、原则
https://zhuanlan.zhihu.com/p/376155724   python为什么引入range
range生成了迭代器，只有在真正用的时候（循环）才会去生成具体的元素
  讲讲python中的垃圾回收
https://www.cnblogs.com/wanlei/p/10216864.html
  除了gc还有什么提高python效率的方法
https://www.cnblogs.com/xybaby/p/6510941.html
  讲一下python中的重载
python没有重载，是个伪命题（差点被面试官带入坑了）
  之前项目中遇到的比较难的问题
  </p>
  </section>
  <footer class="entry-footer"><span title='2022-03-08 20:24:55 +0800 CST'>March 8, 2022</span></footer>
  <a class="entry-link" aria-label="post link to 深信服一面" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/%E6%B7%B1%E4%BF%A1%E6%9C%8D%E4%B8%80%E9%9D%A2/"></a>
</article>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>算法
    </h2>
  </header>
  <section class="entry-content">
    <p>常见算法 线性表 滑动窗口 定义 在给定特定窗口大小的数组或字符串上执行要求的操作
示意图 特点 如果要计算窗口内值得和：每次向右滑一格，只需要增加新格的值，然后减去窗口头的值即可，减少重复计算；
时间复杂度 由于只需要一次遍历就可以取到窗口格中的数据，所以时间复杂度为数组长度O(n)
代码 def SlideWindow(nums: List[int], size: int): left = 0, right = 0 while(right &lt; len(nums)): right_num = nums[right]	# right_num为将要移入窗口的数值 right &#43;= 1	# 右窗口右移 ...	# 进行窗口内数据的一系列更新 while(window needs shrink):	# 判断左侧窗口是否要收缩 left_num = nums[left]	# left_num为将移出窗口的字符 left&#43;= 1	# 左窗口右移 ...	# 进行窗口内数据的一系列更新 题目 力扣1984：学生分数的最小差值
资料 https://labuladong.gitee.io/algo/2/21/60/
查找&amp;排序 二分查找 定义 数组中元素是按升序排列，将数组中间位置记录的关键字与查找关键字比较，如果两者相等，则查找成功；否则利用中间位置记录将表分成前、后两个子数组，如果中间位置记录的关键字大于查找关键字，则进一步查找前一子数组，否则进一步查找后一子数组。重复以上过程，直到找到满足条件的记录，使查找成功，或直到子数组不存在为止，此时查找不成功。
特点 数组必须是按有序结构的；
时间复杂度 O(log2n)
时间复杂度即是while循环的次数。总共n个元素，每次分成2个子数组，每个子数组为n/2, n/4, …, n/2^k，k为循环次数...</p>
  </section>
  <footer class="entry-footer"><span title='2022-03-06 12:34:17 +0800 CST'>March 6, 2022</span></footer>
  <a class="entry-link" aria-label="post link to 算法" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/%E7%AE%97%E6%B3%95/"></a>
</article>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>一键生成requirements
    </h2>
  </header>
  <section class="entry-content">
    <p>一键生成requirement及其安装 python一键生成requirement.txt的方式有两种：
方式一：freeze 在控制台下输入：
pip freeze &gt; requirements.txt 例如：我当前下载的第三方包如下图：
则输入上述指令后，会把所有的第三方包都写入到requirements.txt中：
但实际上我们并不是所有的包都会用到。
方式二：pipreqs 在控制台下先安装pipreqs：
pip install pipreqs 然后输入：
pipreqs . --encoding=utf8 --force --encoding=utf8 表示使用utf8编码，否则可能会报gbk编码问题
--force 表示如果生成目录下如果已经存在requirements.txt文件，则会强制覆盖
生成的requirements.txt如下：
该库只会把项目中用到的库给写入，不会把没用到的库写进来，故推荐使用第二种方式生成。
不过本人使用后发现，本地安装的PyQt5为5.15.4，但它生成的则为5.15.6，不知道是不是默认生成最新版本的第三方库。
一键安装requirements 如果要一键安装requirements.txt中的库，则使用下述指令即可：
pip install -r requirements.txt </p>
  </section>
  <footer class="entry-footer"><span title='2021-12-28 23:31:08 +0800 CST'>December 28, 2021</span></footer>
  <a class="entry-link" aria-label="post link to 一键生成requirements" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90requirements/"></a>
</article>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>如何使用gitee&#43;hugo创建个人博客
    </h2>
  </header>
  <section class="entry-content">
    <p>如何使用gitee&#43;hugo创建个人博客   下载hugo（https://github.com/gohugoio/hugo/releases）
  创建个文件夹用来放hugo
  进入hugo文件夹，使用cmd：
hugo new site myblog myblog表示博客的名字，创建后会多出myblog的文件夹：
  进入myblog，然后执行：
hugo server --buildDrafts # buildDrafts 表示会构建草稿文件。draft: true表示为草稿文件。改为false才会编译进 HTML 文件 执行后会弹出后台运行中的提示：
复制http://localhost:1313/blog.gitee.io/打开是否能正常（默认hugo为空白网页）
  如果想要修改主题，可以上https://themes.gohugo.io/搜索想要的主题
  把主题下载下来，然后复制到myblog/themes中，如这里使用了papermod：   修改myblog下的config.toml，增加主题：
theme = &#34;papermod&#34;   然后再myblog下执行下列指令生成一篇文章my-first-post.md：
hugo new posts/my-first-post.md   然后执行下列指令打包构建并生成public文件夹，用于上传到gitee中：
hugo --buildDrafts   进入gitee，新建仓库→仓库名→开源→设置模板→Readme文件，然后创建：   创建后打开服务下的pages：   选择master，部署：   部署得到pages服务的网址：http://johnhoowong.gitee.io/blog
  回到myblog下的config.toml文件，修改baseURL:
baseURL = &#34;http://johnhoowong.gitee.io/blog.gitee.io&#34; 保存后，重新使用hugo server命令查看服务是否能正常运行（不正常百度查原因）...</p>
  </section>
  <footer class="entry-footer"><span title='2021-12-07 00:35:33 +0800 CST'>December 7, 2021</span></footer>
  <a class="entry-link" aria-label="post link to 如何使用gitee&#43;hugo创建个人博客" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8gitee&#43;hugo%E5%88%9B%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"></a>
</article>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>Flask笔记
    </h2>
  </header>
  <section class="entry-content">
    <p>创建个main.py的文件，输入：  from flask import Flask, render_template app = Flask(__name__) @app.route(&#34;/&#34;) def home(): return render_template(&#34;home.html&#34;)	# 使得访问根url时能够定向到home.html网页（需要放在同一层的templates文件夹中） if __name__ == &#34;__main__&#34;: app.run() 然后运行该文件即可在本地网页访问。</p>
  </section>
  <footer class="entry-footer"><span title='2021-12-07 00:26:52 +0800 CST'>December 7, 2021</span></footer>
  <a class="entry-link" aria-label="post link to Flask笔记" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/flask%E7%AC%94%E8%AE%B0/"></a>
</article>

<article class="post-entry"> 
  <header class="entry-header">
    <h2>第一篇博客
    </h2>
  </header>
  <section class="entry-content">
    <p></p>
  </section>
  <footer class="entry-footer"><span title='2021-12-05 23:36:52 +0800 CST'>December 5, 2021</span></footer>
  <a class="entry-link" aria-label="post link to 第一篇博客" href="http://johnhoowong.gitee.io/blog.gitee.io/posts/my-first-post/"></a>
</article>
    </main>
    
<footer class="footer">
    <span>&copy; 2022 <a href="http://johnhoowong.gitee.io/blog.gitee.io">Johnhoo&#39;s Blog</a></span>
    <span>
        Powered by
        <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
        <a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a>
    </span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
        <path d="M12 6H0l6-6z" />
    </svg>
</a>

<script>
    let menu = document.getElementById('menu')
    if (menu) {
        menu.scrollLeft = localStorage.getItem("menu-scroll-position");
        menu.onscroll = function () {
            localStorage.setItem("menu-scroll-position", menu.scrollLeft);
        }
    }

    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener("click", function (e) {
            e.preventDefault();
            var id = this.getAttribute("href").substr(1);
            if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
                    behavior: "smooth"
                });
            } else {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
            }
            if (id === "top") {
                history.replaceState(null, null, " ");
            } else {
                history.pushState(null, null, `#${id}`);
            }
        });
    });

</script>
<script>
    var mybutton = document.getElementById("top-link");
    window.onscroll = function () {
        if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
            mybutton.style.visibility = "visible";
            mybutton.style.opacity = "1";
        } else {
            mybutton.style.visibility = "hidden";
            mybutton.style.opacity = "0";
        }
    };

</script>
<script>
    document.getElementById("theme-toggle").addEventListener("click", () => {
        if (document.body.className.includes("dark")) {
            document.body.classList.remove('dark');
            localStorage.setItem("pref-theme", 'light');
        } else {
            document.body.classList.add('dark');
            localStorage.setItem("pref-theme", 'dark');
        }
    })

</script>
</body>

</html>
